RancherOS で ECS Cluster を構築してみた
はじめに
プロダクショングレードのコンテナ管理プラットフォームである RANCHER を開発している RANCHER LABS の存在について、最近知りました。同様に RancherOS が開発されていることを知り、調べていると Amazon ECS で利用出来る AMI が公開されていたため、RancherOS で ECS Cluster を構築してみました。
RancherOS とは
Kubernetes と Docker Swarm の両方をサポートするコンテナ管理プラットホームとして Rancher Labs が開発している OSS の コンテナ特化型 Linux ディストリビューションです。思想自体は、CoreOS に通じるものがあります。
前提条件
本検証に利用した筆者の環境は、以下のとおりです。
~ $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29 ~ $ docker version Client: Version: 17.06.0-ce API version: 1.30 Go version: go1.8.3 Git commit: 02c1d87 Built: Fri Jun 23 21:31:53 2017 OS/Arch: darwin/amd64 Server: Version: 17.06.0-ce API version: 1.30 (minimum version 1.12) Go version: go1.8.3 Git commit: 02c1d87 Built: Fri Jun 23 21:51:55 2017 OS/Arch: linux/amd64 Experimental: true ~ $ aws --version aws-cli/1.11.110 Python/2.7.10 Darwin/16.7.0 botocore/1.5.73 ~ $ ecs-cli --version ecs-cli version 0.6.2 (2803fa1)
AWS CLI および ECS CLI をインストールする
以下の手順は、筆者の環境(macOS)に合わせたインストール方法です。
$ curl -O https://bootstrap.pypa.io/get-pip.py $ python3 get-pip.py --user $ pip3 install --user --upgrade awscli $ sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-latest $ sudo chmod +x /usr/local/bin/ecs-cli
各 CLI のインストール方法に関する詳細については、以下の公式ドキュメントをご参照ください。
- AWS Command Line Interface のインストール - AWS Command Line Interface
- Amazon ECS CLI のインストール - Amazon EC2 Container Service
ECS クラスターを作成する
以下のコマンドラインを実行し、ECS インスタンスが起動してくるまで待ちましょう。 --keypair オプションの引数には、適切なキーペア名を指定してください。
$ ecs-cli configure --region ap-northeast-1 --profile default --cluster rancher-cluster INFO[0000] Saved ECS CLI configuration for cluster (rancher-cluster) $ ecs-cli up --keypair `hostname` --capability-iam --size 2 --instance-type t2.small --image-id ami-32b1a755
各リージョンで利用可能なその他の AMI ID については、以下を参照してください。
ECS クラスターが構成出来ましたが、何故か default クラスターに ECS インスタンスが登録されており rancher-cluster は空の模様。 RancherOS の AMI に、/etc/ecs ディレクトリが無いため ecs.config ファイルが作成されなかったことが原因の模様。(ECS クラスター名を、default にしておけばよかった)
本題ではないので、気にせず先に進めます。
RancherOS に SSH 接続してみる
ECS インスタンスの IP アドレスを確認し、SSH 接続してみたいと思います。 セキュリティグループで TCP/22 のインバウンドを許可してあげてください。
なお、RancherOS のデフォルトユーザ名は rancher です。
~ $ ssh -i key rancher@<ip-of-ec2-instance> ... $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7dad4eb3986b amazon/amazon-ecs-agent "/agent" 2 minutes ago Up 2 minutes 127.0.0.1:51678-51679->51678-51679/tcp ecs-agent $ cat /etc/os-release NAME="RancherOS" VERSION=v1.0.3 ID=rancheros ID_LIKE= VERSION_ID=v1.0.3 PRETTY_NAME="RancherOS v1.0.3" HOME_URL="http://rancher.com/rancher-os/" SUPPORT_URL="https://forums.rancher.com/c/rancher-os" BUG_REPORT_URL="https://github.com/rancher/os/issues" BUILD_ID= $
ECS Agent も起動しているようです。
コンテナをデプロイしてみる
nginx コンテナを起動してみます。docker-compose.yml を用意しましょう。 本検証で利用した docker-compose.yml は、以下のとおりです。
version: '2' services: nginx: image: nginx expose: - 80 ports: - "80:80"
ECS クラスター名 default に ECS インスタンスが登録されているため、default クラスターに変更した上でデプロイします。
~/local/ecs $ ecs-cli configure --cluster default INFO[0000] Saved ECS CLI configuration for cluster (default) ~/local/ecs $ ecs-cli compose up ... ~/local/ecs $ ecs-cli ps Name State Ports TaskDefinition 1758f4cd-23b0-4772-b9ea-a67c3d11013b/nginx RUNNING <ECS インスタンスIP>:80->80/tcp ecscompose-ecs:1
ブラウザから nginx のウェルカムページが表示されればデプロイ完了です。
ECS CLI の利用方法については、以下のチュートリアルが参考になると思います。
さいごに
RancherOS を利用して ECS クラスターが構築できました。 コンテナ特化型 Linux ディストリビューションは、ミニマリズムの追求であることが多いように感じます。 RancherOS の概要については、下記のドキュメントに記載がありますので興味があればご一読ください。 RancherOS は、System Container と User Level Container に分離されていますが全てがコンテナとして起動している点が LinuxKit に似ているなと思いました。
ではでは